#ifndef FIGURA_H
#define FIGURA_H

class Cuadrado;
class Circulo;

class Figura
{
private:
	short x;
	short y;
	short x0;
	short y0;
public:
	Figura(short x, short y);
	virtual ~Figura(void);

	short getX();
	short getY();
	short getX0();
	short getY0();
	// Devuelve el ancho de la figura
	virtual short getAncho() = 0;
	// Devuelve el alto de la figura
	virtual short getAlto() = 0;
	// Devuelve el punto en x perteneciente a la figura
	// mas cercano a x
	virtual short getXCercanoA(short x) = 0;
	// Devuelve el punto en y perteneciente a la figura
	// mas cercano a y
	virtual short getYCercanoA(short y) = 0;
	// Traslada la imagen a las nuevas coordenadas
	void moverA(short x, short y);
	// Define la posicion inicial de la figura en una nueva trayectoria
	void definirCero(short x, short y);
	// Double dispatch utilizado para resolver colisiones
	virtual bool seSuperponeCon(Figura * f) { return false; }
	virtual bool seSuperponeCon(Cuadrado * f) { return false; }
	virtual bool seSuperponeCon(Circulo * f) { return false; }
	// Calcula el modulo de un vector
	double distanciaEntrePuntos(short x1,short y1, short x2, short y2);
};

#endif
